macro mUsrBtns { local .ll,.l0,.l3
      xor     ecx,ecx
.ll:  mov     eax,ecx
      add     eax,IDCBtnUsr
      cmp     [wparam],eax
      jnz     .l0
      mov     esi,[txtusr1+ecx*4]
      call   UsrTknReplace ;CopyToWinClipboard
      PasteTxtTo
      ret
.l0:  inc     ecx
      cmp     ecx,8*2+2
      jnz     .ll
      }
macro mZnaki2Btns { local .ll,.l0,.l3
      xor     ecx,ecx
.ll:  mov     eax,ecx
      add     eax,IDCBtnUsr+18
      cmp     [wparam],eax
      jnz     .l0
      mov     esi,znakTxt2
        ;imul ecx,3
        shl   ecx,1
        add   esi,ecx
      call   CopyToWinClipboard
      PasteTxtTo
      ret
.l0:  inc     ecx
      cmp     ecx,12*2
      jnz     .ll
      }
btns_Znakiss = 27
macro mZnakiBtns { local .ll,.l0,.l3
mZnaki2Btns
      xor     ecx,ecx
.ll:  mov     eax,ecx
      add     eax,IDCBtnUsr+110
      cmp     [wparam],eax
      jnz     .l0
      mov     esi,znakTxt
        ;imul ecx,3
        shl   ecx,1
        add   esi,ecx
      call   CopyToWinClipboard
      PasteTxtTo
      ret
.l0:  inc     ecx
      cmp     ecx,btns_Znakiss
      jnz     .ll
      }
IDCBtnUsr = 6000
        buttonYGen2 = 900
        btnXStart2  = 220-4
invoke CreateWindowEx,0,'button','usr1',dword WS_VISIBLE+WS_CHILD,dword btnXStart2,dword buttonYGen2,dword 38,dword 25,[DLL_hwnd],dword IDCBtnUsr,0,0
invoke CreateWindowEx,0,'button','usr2',dword WS_VISIBLE+WS_CHILD,dword btnXStart2+40,dword buttonYGen2,dword 38,dword 25,[DLL_hwnd],dword IDCBtnUsr+1,0,0
invoke CreateWindowEx,0,'button','usr3',dword WS_VISIBLE+WS_CHILD,dword btnXStart2+80,dword buttonYGen2,dword 38,dword 25,[DLL_hwnd],dword IDCBtnUsr+2,0,0
invoke CreateWindowEx,0,'button','usr4',dword WS_VISIBLE+WS_CHILD,dword btnXStart2+120,dword buttonYGen2,dword 38,dword 25,[DLL_hwnd],dword IDCBtnUsr+3,0,0

invoke CreateWindowEx,0,'button','usr5',dword WS_VISIBLE+WS_CHILD,dword btnXStart2,dword buttonYGen2+30,dword 38,dword 25,[DLL_hwnd],dword IDCBtnUsr+4,0,0
invoke CreateWindowEx,0,'button','usr6',dword WS_VISIBLE+WS_CHILD,dword btnXStart2+40,dword buttonYGen2+30,dword 38,dword 25,[DLL_hwnd],dword IDCBtnUsr+5,0,0
invoke CreateWindowEx,0,'button','usr7',dword WS_VISIBLE+WS_CHILD,dword btnXStart2+80,dword buttonYGen2+30,dword 38,dword 25,[DLL_hwnd],dword IDCBtnUsr+6,0,0
invoke CreateWindowEx,0,'button','usr8',dword WS_VISIBLE+WS_CHILD,dword btnXStart2+120,dword buttonYGen2+30,dword 38,dword 25,[DLL_hwnd],dword IDCBtnUsr+7,0,0
buttonYGen2 = 380
btnXStart2  = 4
xor ebx,ebx
mov esi,4
.ryr:
mov eax,IDCBtnUsr+8
add eax,ebx
invoke CreateWindowEx,0,'button','usr',dword WS_VISIBLE+WS_CHILD,dword esi,dword buttonYGen2,dword 34,dword 25,[DLL_hwnd],dword eax,0,0
add esi,40
inc ebx
cmp ebx,10
jb  .ryr
xor ebx,ebx
mov esi,406
mov edi,znakTxt2
.wyr:
mov eax,IDCBtnUsr+18
add eax,ebx
invoke CreateWindowEx,0,'button',edi,dword WS_VISIBLE+WS_CHILD,dword esi,dword buttonYGen2,dword 15,dword 20,[DLL_hwnd],dword eax,0,0
add edi,2
add esi,16
inc ebx
cmp ebx,12
jb  .wyr

xor ebx,ebx
mov esi,406
mov edi,znakTxt3
.wy2:
mov eax,IDCBtnUsr+18+12
add eax,ebx
invoke CreateWindowEx,0,'button',edi,dword WS_VISIBLE+WS_CHILD,dword esi,dword buttonYGen2+21,dword 15,dword 20,[DLL_hwnd],dword eax,0,0
add edi,2
add esi,16
inc ebx
cmp ebx,12
jb  .wy2
;invoke CreateWindowEx,0,'button','usr10',dword WS_VISIBLE+WS_CHILD,dword btnXStart2+40,dword buttonYGen2,dword 38,dword 25,[DLL_hwnd],dword IDCBtnUsr+9,0,0
;invoke CreateWindowEx,0,'button','usr11',dword WS_VISIBLE+WS_CHILD,dword btnXStart2+80,dword buttonYGen2,dword 38,dword 25,[DLL_hwnd],dword IDCBtnUsr+10,0,0
;invoke CreateWindowEx,0,'button','usr12',dword WS_VISIBLE+WS_CHILD,dword btnXStart2+120,dword buttonYGen2,dword 38,dword 25,[DLL_hwnd],dword IDCBtnUsr+11,0,0
xor ebx,ebx
mov esi,408
mov edi,znakTxt
.ry2:
mov eax,IDCBtnUsr+110
add eax,ebx
invoke CreateWindowEx,0,'button',edi,dword WS_VISIBLE+WS_CHILD,dword 360,dword esi,dword 34,dword 18,[DLL_hwnd],dword eax,0,0
add esi,18
add edi,2
inc ebx
cmp ebx,btns_Znakiss
jb  .ry2
        jmp @f
        znakTxt db '+',0
                db '-',0
                db '*',0
                db '/',0
                db '1',0
                db '2',0
                db '3',0
                db '4',0
                db '5',0
                db '6',0
                db '7',0
                db '8',0
                db '9',0
                db '0',0
                db ':',0
                db '.',0
                db ',',0                
                db 'A',0
                db 'B',0
                db 'C',0
                db 'D',0
                db 'E',0
                db 'F',0
                db 'L',0
                db 'I',0
                db 'S',0
                db 'T',0
       znakTxt2 db '_',0
                db '%',0
                db '`',0
                db '<',0
                db '>',0
                db '#',0
                db '=',0
                db '$',0
		db ' ',0
		db '\',0
		db 'm',0
                db '&',0
       znakTxt3 db 'x',0
                db 'y',0
                db 'z',0
		db 'o',0
                db 'w',0
                db 'u',0
                db 'k',0
                db 'p',0
                db 'r',0
		db 'n',0
		db 'j',0
                db 'v',0
        rept 20 n:1 { txtusr#n dd usrEmptyTxt }
        usrEmptyTxt db ';no user text',13,10,0
        userFile db 'user.txt',0
@@:     mov eax,userFile
        mov edx,UserAllTxt
        call LoadFile
        cmp  dword [rbait],0
        jz   @f
        mov esi,UserAllTxt
        add esi,[rbait]
        mov edi,UserAllTxt-1
        mov ebx,txtusr1
.1:     inc edi
        cmp edi,esi
        jae  @f
        cmp dword [edi],'#usr'
        jnz .1
        add edi,5
        mov [ebx],edi
        add ebx,4
.2:     inc edi
        cmp dword [edi],'....'
        jnz .2
        mov dword [edi],0
        cmp edi,esi
        jb  .1
@@: